package juc.popular;

import java.util.concurrent.Callable;

/**
 * 线程的基本使用
 * * {@link Thread#join()}       将挂起调用线程的执行任务,直到被调用的对象完成它的执行任务
 * * {@link Thread#sleep(long)}  让当前线程暂停指定时间,只是让出CPU的使用权,并不释放锁
 * * {@link Thread#yield()}      暂停当前线程的执行,也就是当前CPU的使用权,让其他线程有机会执行,不能指定时间
 *
 * @author 王霄
 * @date 2021/9/22 9:34
 **/
public class ThreadDemo {
    public static void main(String[] args) throws Exception {
        //现在有 T1、T2、T3 三个线程,你怎样保证 T1 执行完成后 T2 才执行,T2 执行完后 T3 执行
        var one = new OneThread();
        var two = new Thread(new TwoThread());
        var three = new ThreeThread();

        one.start();
        one.join();
        two.start();
        two.join();
        System.out.println(three.call());
    }

    public static class OneThread extends Thread {
        @Override
        public void run() {
            System.out.println("线程的第1种创建方式");
        }
    }

    public static class TwoThread implements Runnable {
        @Override
        public void run() {
            System.out.println("线程的第2种创建方式");
        }
    }

    public static class ThreeThread implements Callable<String> {
        @Override
        public String call() {
            return "线程的第3种创建方式";
        }
    }
}
